/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.io.File;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.List;
import javax.swing.SwingWorker;


public class GuardarReporteSwingWorker<T> extends SwingWorker<Integer,Object> implements GuardarReporte<T>
{

    private File archivo;
    private List<T> lista;
    private boolean cancelado;

    
    protected Integer doInBackground() throws Exception
    {
          int objetosCopiados=0;
		 
	      PrintWriter out= new PrintWriter(new BufferedOutputStream(new FileOutputStream(archivo,true)));
		  for (int i=0; i < lista.size(); i++)
	      {
		      //Flujo de salida al archivo de texto
	              if (cancelado)
	              {
	                 break;
	              }
	              else
	              {
	                  setProgress(100 * (i+1)/lista.size());
	
	                  Thread.sleep(5);
	                  out.println(lista.get(i).toString());
	                  ++objetosCopiados;
	              }
	
	       }
	       out.println();
		   out.close();

         return objetosCopiados;
    }

    public void guardar(File archivo, List<T> lista) throws Exception
    {
       this.archivo= archivo;
       this.lista= lista;
       this.execute();
    }

    public void cancelar()
    {
      cancelado=true;
    }
}
